home *** CD-ROM | disk | FTP | other *** search
/ Game Cracker (Expanded Edition) / Game Cracker (Expanded Edition).iso / cracks / SV_PPWEB.ZIP / ProPinball - The Web.txt < prev   
Encoding:
Text File  |  1998-04-08  |  12.0 KB  |  260 lines

  1.  
  2. Free Information Xchange '98 presents:
  3.  
  4. ProPinball: The Web - CD crack by Static Vengeance
  5.  
  6. Requirements:
  7. hex editor and full install
  8.  
  9.     ProPinball: The Web has many of the same features as TimeShock! and the same bug.  Having
  10. cracked TimeShock!, I figured this one would be really easy and really quick.  Well, it was a bit
  11. harder then I thought it would be.  First off, all the files are stored on the CD except for a the
  12. couple of EXE files it takes to run the game.  So my first thought was to copy the sub-directory
  13. "pc_dat" to the "web's" sub-directory and see what happens.  Well of course the game asks for the
  14. CD.  So I got W32Dasm up and running and put myself in the middle of the CD check routine.  That
  15. routine looks like this:
  16.  
  17. * Referenced by a CALL at Address:
  18. |:00413EC0   
  19. |
  20. :00415638 53                      push ebx
  21. :00415639 51                      push ecx
  22. :0041563A 52                      push edx
  23. :0041563B 56                      push esi
  24. :0041563C 57                      push edi
  25. :0041563D 55                      push ebp
  26. :0041563E 83EC20                  sub esp, 00000020
  27. :00415641 833DC0CC4200FF          cmp dword ptr [0042CCC0], FFFFFFFF
  28. :00415648 741F                    je 00415669
  29. :0041564A A0C0CC4200              mov al, byte ptr [0042CCC0]
  30. :0041564F 0441                    add al, 41
  31. :00415651 A28CCA4200              mov byte ptr [0042CA8C], al
  32. :00415656 E895FFFFFF              call 004155F0
  33. :0041565B 85C0                    test eax, eax
  34. :0041565D 750A                    jne 00415669
  35. :0041565F C705C0CC4200FFFFFFFF    mov dword ptr [0042CCC0], FFFFFFFF
  36.  
  37. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  38. |:00415648(C), :0041565D(C)
  39. |
  40. :00415669 833DC0CC4200FF          cmp dword ptr [0042CCC0], FFFFFFFF
  41. :00415670 7537                    jne 004156A9
  42. :00415672 BA03000000              mov edx, 00000003
  43.  
  44. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  45. |:0041568D(C)
  46. |
  47. :00415677 88D0                    mov al, dl
  48. :00415679 0441                    add al, 41
  49. :0041567B A28CCA4200              mov byte ptr [0042CA8C], al
  50. :00415680 E86BFFFFFF              call 004155F0
  51. :00415685 85C0                    test eax, eax
  52. :00415687 7506                    jne 0041568F
  53. :00415689 42                      inc edx
  54. :0041568A 83FA1A                  cmp edx, 0000001A
  55. :0041568D 7CE8                    jl 00415677
  56.  
  57. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  58. |:00415687(C)
  59. |
  60. :0041568F 83FA19                  cmp edx, 00000019
  61. :00415692 7E0F                    jle 004156A3
  62.  
  63. * Possible StringData Ref from Data Obj ->"Please insert "The Web" CD and "  <-- The string that got us
  64.                                         ->"try again"                        <-- to look into the code
  65.                                   |
  66. :00415694 6898A24200              push 0042A298
  67. :00415699 6A2D                    push 0000002D
  68. :0041569B E8A02B0000              call 00418240
  69. :004156A0 83C408                  add esp, 00000008
  70.  
  71. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  72. |:00415692(C)
  73. |
  74. :004156A3 8915C0CC4200            mov dword ptr [0042CCC0], edx
  75.  
  76. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  77. |:00415670(C)
  78. |
  79. :004156A9 BB14000000              mov ebx, 00000014
  80. :004156AE 89E0                    mov eax, esp
  81. :004156B0 BE04020000              mov esi, 00000204
  82. :004156B5 31D2                    xor edx, edx
  83.  
  84. * Possible StringData Ref from Data Obj ->"?:"
  85.                                   |
  86. :004156B7 BF8CCA4200              mov edi, 0042CA8C
  87. :004156BC E85FD70000              call 00422E20
  88. :004156C1 89742408                mov dword ptr [esp+08], esi
  89. :004156C5 897C240C                mov dword ptr [esp+0C], edi
  90.  
  91. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  92. |:00415700(C), :00415709(U), :00415717(U)
  93. |
  94. :004156C9 89E0                    mov eax, esp
  95. :004156CB 50                      push eax
  96. :004156CC 6802330000              push 00003302
  97. :004156D1 6803080000              push 00000803
  98. :004156D6 6A00                    push 00000000
  99.  
  100. * Reference To: WINMM.mciSendCommandA, Ord:0001h
  101.                                   |
  102. :004156D8 2EFF1568914400          Call dword ptr cs:[00449168]
  103. :004156DF 85C0                    test eax, eax
  104. :004156E1 7436                    je 00415719
  105. :004156E3 6A02                    push 00000002
  106.  
  107. * Possible StringData Ref from Data Obj ->"Pro Pinball - The Web"
  108.                                   |
  109. :004156E5 68C4A24200              push 0042A2C4
  110.  
  111. * Possible StringData Ref from Data Obj ->"Unable to play CD tracks.  This "
  112.                                         ->"may be because another program "
  113.                                         ->"such as CDPLAYER is already using "
  114.                                         ->"the drive"
  115.                                   |
  116. :004156EA 68DCA24200              push 0042A2DC
  117. :004156EF 8B1D48474300            mov ebx, dword ptr [00434748]
  118. :004156F5 53                      push ebx
  119.  
  120. * Reference To: USER32.MessageBoxA, Ord:000Ah
  121.                                   |
  122. :004156F6 2EFF1534914400          Call dword ptr cs:[00449134]
  123. :004156FD 83F803                  cmp eax, 00000003
  124. :00415700 72C7                    jb 004156C9
  125. :00415702 7607                    jbe 0041570B
  126. :00415704 83F805                  cmp eax, 00000005
  127. :00415707 7449                    je 00415752
  128. :00415709 EBBE                    jmp 004156C9
  129.  
  130. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  131. |:00415702(C)
  132. |
  133. :0041570B 6A02                    push 00000002
  134. :0041570D 6A01                    push 00000001
  135. :0041570F E82C2B0000              call 00418240
  136. :00415714 83C408                  add esp, 00000008
  137. :00415717 EBB0                    jmp 004156C9
  138.  
  139. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  140. |:004156E1(C)
  141. |
  142. :00415719 8B442404                mov eax, dword ptr [esp+04]
  143. :0041571D A378CA4200              mov dword ptr [0042CA78], eax
  144. :00415722 8D442414                lea eax, dword ptr [esp+14]
  145. :00415726 50                      push eax
  146. :00415727 6800040000              push 00000400
  147. :0041572C 680D080000              push 0000080D
  148. :00415731 8B442410                mov eax, dword ptr [esp+10]
  149. :00415735 BD0A000000              mov ebp, 0000000A
  150. :0041573A 50                      push eax
  151. :0041573B 896C2428                mov dword ptr [esp+28], ebp
  152.  
  153. * Reference To: WINMM.mciSendCommandA, Ord:0001h                    <-- Calls through Windows Multi-Media dll
  154.                                   |
  155. :0041573F 2EFF1568914400          Call dword ptr cs:[00449168]
  156. :00415746 85C0                    test eax, eax
  157. :00415748 7408                    je 00415752
  158. :0041574A 31D2                    xor edx, edx
  159. :0041574C 891578CA4200            mov dword ptr [0042CA78], edx
  160.  
  161. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  162. |:00415707(C), :00415748(C)
  163. |
  164. :00415752 83C420                  add esp, 00000020
  165. :00415755 5D                      pop ebp
  166. :00415756 5F                      pop edi
  167. :00415757 5E                      pop esi
  168. :00415758 5A                      pop edx
  169. :00415759 59                      pop ecx
  170. :0041575A 5B                      pop ebx
  171. :0041575B C3                      ret
  172.  
  173.     Simple enough, just trace it backwards and kill the call to the CD check routine.  There are
  174. two files that have a CD check routine in them.  Then menu program which allows you to change some
  175. selections and the actual game called wgame.exe.  I made an edit that killed the call to the CD routine
  176. in wgame.exe and ran it.  Popped up and ran.... until I hit F1 for one player, then I got a black screen
  177. and a pop up dialog box saying "The Web CD is missing" and it let me click "OKAY" and quit back to Win95.
  178. Damn, there is some type of secondary check or flag system in the game.  So now the fun really begins!
  179. This time I ran that game (with the patch) and had the CD in the drive, same thing!  So now it's back to
  180. tracing the routines and checking for flags.  After many sheets of paper and tons of notes and addresses I
  181. thought I would narrow it down to being WINMM releated.  So I starting looking into sections of code that
  182. where making mci (winmm) calls.  Eventually I found this little section that seemed to have possiblities:
  183.  
  184. * Referenced by a CALL at Addresses:
  185. |:00404796   , :00408E17   , :00408F2D   , :004093C2   , :0040941E   
  186. |:00409763   , :004097F5   , :00409894   , :0040AAC7   , :0040D44A   <-- Too MANY calls to trace, but
  187. |:0040D4B3   , :0040D4DE   , :0040D549   , :0040D56F   , :0040D5EA   <-- it's used alot
  188. |:0040E3DE   , :00410EE3   , :00411E09   , :00411F50   , :00412732   
  189. |
  190. :00415840 53                      push ebx
  191. :00415841 51                      push ecx
  192. :00415842 56                      push esi
  193. :00415843 89C3                    mov ebx, eax
  194. :00415845 89D6                    mov esi, edx
  195. :00415847 8B1578CA4200            mov edx, dword ptr [0042CA78]
  196. :0041584D A384CA4200              mov dword ptr [0042CA84], eax
  197. :00415852 85D2                    test edx, edx
  198. :00415854 7411                    je 00415867
  199. :00415856 6A00                    push 00000000
  200. :00415858 6A00                    push 00000000
  201. :0041585A 6808080000              push 00000808
  202. :0041585F 52                      push edx
  203.  
  204. * Reference To: WINMM.mciSendCommandA, Ord:0001h                  <-- I was looking for WINMM calls
  205.                                   |
  206. :00415860 2EFF1568914400          Call dword ptr cs:[00449168]
  207.  
  208. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  209. |:00415854(C)
  210. |
  211. :00415867 89D8                    mov eax, ebx
  212. :00415869 E836FFFFFF              call 004157A4                    <-- what does this call do?
  213. :0041586E 8935541E4300            mov dword ptr [00431E54], esi    <-- Looking for possible flags
  214. :00415874 31F6                    xor esi, esi
  215. :00415876 B801000000              mov eax, 00000001
  216. :0041587B 8935A0CA4200            mov dword ptr [0042CAA0], esi    <-- Looking for possible flags
  217. :00415881 5E                      pop esi
  218. :00415882 59                      pop ecx
  219. :00415883 5B                      pop ebx
  220. :00415884 C3                      ret
  221.  
  222.     Well I checked out the call and saw it was sending addition mci commands.  So I thought
  223. I would kill the call at 00415869 and see what happens.  Well the game starts up and I can now
  224. play as one player.... but.... no sound at all!  hhmmmmm...  Getting closer.  I thought the
  225. mov eax,ebx was needed for the call to 4157A4, so I changes it to xor esi,esi to zero out esi,
  226. then the mov dword ptr [00431E54], esi would store a zero there.  Tried the game again, still no
  227. sound.  Well then, what if we prevent anything from being stored at ptr [00431E54]?  Well the game
  228. worked (to my delight).  So using the information we have we need to do the following:  Kill the
  229. call to the CD check routine.  Kill the above listed call to 415869 and make sure ptr [00431E54]
  230. is NOT changed.  So looking at the code I thought as long as ESI is getting xor'ed to itself (or
  231. getting zero'ed out) I would change the mov dword ptr [00431E54], esi to mov esi,dword ptr [00431E54]
  232. and that way we only load from there.  Plus itstead of change the "89 35 54 1E 43 00" to all 90's
  233. we'll only have to change the 89 to 8B and that changes the instruction around!  So to crack this
  234. one you'll need to:
  235.  
  236. 1.  Install the game to your hard drive
  237. 2.  Copy the PC_DAT directory to the same directory as "The Web"
  238. 3.  Make the following edits to the EXE files listed:
  239.  
  240. Edit wgame.exe
  241. ===========================================
  242. Search for: E8 73 17 00 00    offset 78,528
  243. Change to : 90 90 90 90 90
  244.  
  245. Search for: E8 36 FF FF FF 89 offset 85,097
  246. Chagne to : 90 90 90 90 90 8B
  247.  
  248.  
  249. Edit menu.exe
  250. ===========================================
  251. Search for: E8 33 1F 00 00    offset 10,576
  252. Change to : 90 90 90 90 90
  253.  
  254. Search for: E8 36 FF FF FF 89 offset 19,129
  255. Chagne to : 90 90 90 90 90 8B
  256.  
  257.     Granted, this one was a little bit more work, but it's FiX'ed now!
  258.  
  259. Static Vengeance
  260.